package com.edou.base.util;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;


/**
 * 数组工具类
 * @creator     admin
 * @create-time Aug 17, 2015   4:52:32 PM
 * @version 1.0
 */
public class NumberUtil {

	/**
	 * 将string类型字符串数组转换成Long类型
	 * @param ids
	 * @return
	 */
	public static Long[] convertStringArrayToLongArray(String[] ids){
		List<Long> convertList = new ArrayList<Long>();
		for(int i = 0;i<ids.length;i++){
			if (StringUtils.isNotBlank(ids[i])) {
				convertList.add(Long.parseLong(ids[i]));
				
			}
		}
		return convertList.toArray(new Long[convertList.size()]);
	}
	/**
	 * 将string类型字符串数组转换成Integer类型
	 * @param ids
	 * @return
	 */
	public static Integer[] convertStringArrayToIntergeArray(String[] ids){
		Integer[] convert = new Integer[ids.length];
		for(int i = 0;i<ids.length;i++){
			if (StringUtils.isNotBlank(ids[i])) {
				convert[i] = Integer.parseInt(ids[i]);
			}
		}
		
		return convert;
	}
	
	
	/**
	 * 将string类型字符串数组转换成Integer类型
	 * @param ids
	 * @return
	 */
	public static Double[] convertStringArrayToDoubleArray(String[] ids){
		Double[] convert = new Double[ids.length];
		for(int i = 0;i<ids.length;i++){
			if (StringUtils.isNotBlank(ids[i])) {
				convert[i] = Double.valueOf(ids[i]);
			}
		}
		
		return convert;
	}
	
	/**
	 * 将string转换成int
	 * @param str
	 * @param defaultVal
	 * @return
	 */
	public static Integer convertStringToInteger(String str,Integer defaultVal){
		Integer resultVal = defaultVal;
		if(StringUtils.isNotBlank(str) && NumberUtils.isDigits(str)){
			resultVal = Integer.valueOf(str);
		}
		return resultVal;
	}
	
	/**
	 * 将string转换成float
	 * @param str
	 * @param defaultVal
	 * @return
	 */
	public static Float convertStringToFloat(String str,Float defaultVal){
		Float resultVal = defaultVal;
		if(StringUtils.isNotBlank(str) && NumberUtils.isDigits(str)){
			resultVal = Float.valueOf(str);
		}
		return resultVal;
	}
	
	/**
	 * 比较是否相等
	 * @param num1
	 * @param num2
	 * @return
	 */
	public static boolean equals(Long num1,Long num2){
		if(null != num1 && null != num2 && num1.longValue() == num2.longValue()){
			return true;
		}
		
		return false;
	}
	
	/**
	 * 比较是否相等
	 * @param num1
	 * @param num2
	 * @return
	 */
	public static boolean doubleEquals(Double num1,Double num2){
		if(null != num1 && null != num2 && num1.doubleValue() == num2.doubleValue()){
			return true;
		}
		
		return false;
	}
	
	/**
	 * 对double数据进行取精度.
	 * 
	 * @param value
	 *            double数据.
	 * @param scale
	 *            精度位数(保留的小数位数).
	 * @param roundingMode
	 *            精度取值方式. roundingMode 枚举
	 * @return 精度计算后的数据.
	 */
	public static double round(double value, int scale, int roundingMode) {
		BigDecimal bd = new BigDecimal(String.valueOf(value));
		bd = bd.setScale(scale, roundingMode);
		double d = bd.doubleValue();
		bd = null;
		return d;
	}

	/**
	 * double 相加
	 * 
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static double sum(double d1, double d2) {
		BigDecimal bd1 = new BigDecimal(Double.toString(d1));
		BigDecimal bd2 = new BigDecimal(Double.toString(d2));
		return bd1.add(bd2).doubleValue();
	}
	
	public static double sum(double d1, double d2,double d3) {
		BigDecimal bd1 = new BigDecimal(Double.toString(d1));
		BigDecimal bd2 = new BigDecimal(Double.toString(d2));
		BigDecimal bd3 = new BigDecimal(Double.toString(d3));
		double val = bd1.add(bd2).add(bd3).doubleValue();
		
		return val;
	}
	
	public static double sum(double d1, double d2,double d3,double d4) {
		BigDecimal bd1 = new BigDecimal(Double.toString(d1));
		BigDecimal bd2 = new BigDecimal(Double.toString(d2));
		BigDecimal bd3 = new BigDecimal(Double.toString(d3));
		BigDecimal bd4 = new BigDecimal(Double.toString(d4));
		double val = bd1.add(bd2).add(bd3).add(bd4).doubleValue();
		
		return val;
	}

	/**
	 * double 相减
	 * 
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static double sub(double d1, double d2) {
		BigDecimal bd1 = new BigDecimal(Double.toString(d1));
		BigDecimal bd2 = new BigDecimal(Double.toString(d2));
		return bd1.subtract(bd2).doubleValue();
	}

	/**
	 * double 乘法
	 * 
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static double mul(double d1, double d2) {
		BigDecimal bd1 = new BigDecimal(Double.toString(d1));
		BigDecimal bd2 = new BigDecimal(Double.toString(d2));
		return bd1.multiply(bd2).doubleValue();
	}
	
	/**
	 * 乘法
	 * @param data
	 * @return
	 */
	public static Double mul(Double[] data) {
		BigDecimal total = new BigDecimal(1d);
		for(int i = 0;i < data.length;i++){
			BigDecimal bd = new BigDecimal(data[i]);
			total = total.multiply(bd);
		}
		
		return total.doubleValue();
	}

	/**
	 * double 除法
	 * 
	 * @param d1
	 * @param d2
	 * @param scale
	 *            四舍五入 小数点位数
	 * @return
	 */
	public static double div(double d1, double d2, int scale) {
		// 当然在此之前，你要判断分母是否为0，
		// 为0你可以根据实际需求做相应的处理
		if(d2 == 0){
			return 0;
		}

		BigDecimal bd1 = new BigDecimal(Double.toString(d1));
		BigDecimal bd2 = new BigDecimal(Double.toString(d2));
		return bd1.divide(bd2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
	}
}
